Data array storage systems may include a plurality of host interface units (I/O modules), physical storage units (e.g., disk drives, SSD drives, etc.), and disk interface units (disk adapters) that are coupled to and used to control the storage units. Host systems coupled to the data array storage systems access data and provide control information through channels connected to the data array storage system. The host systems and applications thereon do not address the physical storage units of the data array storage system directly, but rather, access what appears to the host systems as a plurality of logical storage units. A particular one of the logical storage units may or may not correspond to any particular one of the physical storage units and, often, there is a more complex relationship between physical storage units and logical storage units.
It is known to compress data stored on data storage systems so that the actual storage space used is less than the uncompressed size of the data. However, there is usually a tradeoff between the amount of processing resources needed to apply compression algorithms to data and the amount of data compression that is realized. In many, but not all, cases, greater amounts of compression use greater amounts of processing resources. In addition, the frequency of data access plays a role since compressing data that is accessed relatively infrequently has less of an impact on processing resources of a storage system than compressing data that is accessed more frequently. Also, the specific contents of the data may make a difference; certain types of data compress more with less processing resources than other types of data. It is also sometimes the case that certain types of data achieve a better ratio of compression to processing resources used with particular compression algorithms than other types of data. Since the type of data as well as the frequency of data accesses may vary over time, it may not be possible to select a particular compression algorithm or set of algorithms that would be optimal over the entire life of a particular storage system.
Accordingly, it is desirable to be able to reliably vary data compression algorithm(s) used by a storage system in a way that optimizes a tradeoff between processing resources used and amount of compression performed even if the type of data and frequency of data accesses changes.